Structual Typing
異なるクラスのオブジェクトだとしても内部構造が同じであればエラーにはならない
例) Typescript は Structual Typing なのでこんなコードも実行できる
code:Typescript
type Duck = {cry: () => void, swimSpeed: number};
type Cat = {cry: () => void};
type crySomething = {cry: () => void};
const cry = (obj: crySomething) => obj.cry();
const duck: Duck = {cry: () => console.log('Duck'), swimSpeed: 2.0};
const cat: Cat = {cry: () => console.log('Cat')};
cry(duck);
cry(cat);